www.gusucode.com > matlab从零到进阶程序与数据 > matlab从零到进阶程序与数据/第4章 MATLAB程序设计/triangle_table.m

    function triangle_table
%生成界面,默认控件属性为’normalized’即随界面大小而变化,名称为'triangle_table',
%figure的编号去掉,不显示菜单项
fig = figure('defaultuicontrolunits','normalized','name','triangle_table',...
    'numbertitle','off','menubar','none');
%建立坐标轴,但是不显示它
ah = axes('Pos',[.1 .2 .75 .75],'Visible','off');
%建立滚动条,回调函数为change_color
slider_h = uicontrol('style','slider','units','normalized','pos',...
    [0.1,0.05,0.75,0.05],'sliderstep',[1/6,0.05],'callback',@change_color);
%画网格并填好数字
hold on
for k = 0:6
    plot(0:6-k,(6-k)*ones(1,(7-k)),'k');
    plot(k*ones(1,(7-k)),k:6,'k');
end
plot([0,6],[0,6],'k');
hold off;
for x = 1:5
    for y = 1:x
        text(y-0.5,x+0.5,num2str(x),'color','k','tag','数字');
    end
end
for k = 0:5
    text(k+0.1,k+0.5,[num2str(k),'.5'],'tag','数字');
end
%====滚动条的回调函数======
    function change_color(hObject,eventdata)
        %滚动条控件句柄slider_h在主函数中,由于是嵌套函数,可以直接使用
        v = round(6*get(slider_h,'value'));
        num_h = findobj('tag','数字');
        num_pos = get(num_h,'pos');
        %红色数字的索引
        red_num_logic = cellfun(@(x) (x(1)<=v&&x(2)<=v),num_pos);
        set(num_h(red_num_logic),'color','r');
        set(num_h(~red_num_logic),'color','k');
    end
end